#ifndef _GUIBASENODE_H_INCLUDE_
#define _GUIBASENODE_H_INCLUDE_

#include <wx/wx.h>
#include "../common.h"

enum GuiNodeType
{
    GUINODETYPE_BUTTON = 0,           // 按钮
    GUINODETYPE_NULL
};

class maindrawscene;

class GuiBaseNode : public NedAllocatedObject
{
public:
    GuiBaseNode();
    GuiBaseNode(int id,wxString nodename);
    ~GuiBaseNode();

    /// 设置结点ID
    inline void setID(int id) { mId = id; }
    /// 得到结点ID
    inline int getID(void) { return mId; }
    /// 设置结点名称
    inline void setNodeName(wxString nodename) { mNodeName = nodename; }
    /// 得到结点名称
    inline wxString getNodeName(void) { return mNodeName; }
    /// 设置结点类型
    inline void setNodeType(GuiNodeType type) { mGuiNodeType=type; }
    /// 得到结点类型
    inline GuiNodeType getNodeType(void) { return mGuiNodeType; }
    /// 设置结点提示语
    inline void setTipText(wxString tip) { mTipString = tip; }
    /// 得到结点提示语
    inline wxString getTipText(void) { return mTipString; }
    /// 设置结点显示范围
    inline void setRect(wxRect rect) { mRect = rect; }
    /// 得到结点显示范围
    inline wxRect getRect(void) { return mRect; }
    /// 设置结点正常颜色
    inline void setNormalColor(wxColour col) { mColNormal = col; }
    /// 设置结点鼠标经过颜色
    inline void setOverColor(wxColour col) { mColOver = col; }
    /// 设置结点鼠标点击颜色
    inline void setClickColor(wxColour col) { mColClick = col; }
    /// 设置结点显示颜色
    virtual void setColor(wxColour normalcol,wxColour overcol,wxColour clickcol);
    /// 得到结点正常颜色
    inline wxColour getNormalColor(void) { return mColNormal; }
    /// 得到结点鼠标经过颜色
    inline wxColour getOverColor(void) { return mColOver; }
    /// 得到结点鼠标点击颜色
    inline wxColour getClickColor(void) { return mColClick; }
    /// 得到结点显示颜色
    inline void geColor(wxColour* normalcol,wxColour* overcol,wxColour* clickcol)
    {
        *normalcol = mColNormal;
        *overcol = mColOver;
        *clickcol = mColClick;
    }
    /// 设置边框颜色
    inline void setBorderColor(wxColour col) { mColBorder = col; }
    /// 得到边框颜色
    inline wxColour getBorderColor(void) { return mColBorder; }

    /// 工作区域改变
    virtual void changeWorkingRect(wxRect workingrect) {}
    /// 更新
    virtual void update(void) {}
    /// 绘制
    virtual void draw(maindrawscene *painter) {}
    /// 处理鼠标事件
    virtual bool OnMMouseEvent(wxMouseEvent event) { return false; }
    /// 重置结点状态
    virtual void reset(void) {}

private:
    wxString mNodeName;                              /**< 结点名称 */
    GuiNodeType mGuiNodeType;                        /**< 结点类型 */
    wxString mTipString;                             /**< 结点提示字符串 */
    int mId;                                         /**< 结点ID */
    wxRect mRect;                                    /**< 结点范围 */
    wxColour mColNormal,mColOver,mColClick;          /**< 正常色,鼠标放上去颜色,鼠标点击后颜色 */
    wxColour mColBorder;                             /**< 边框颜色 */
};

#endif // GUIBASENODE_H
